#include<bits/stdc++.h>
using namespace std;

int n, m, step=0, res = -1, tmp = 0;
int a[110][110], c[110][110];

int dfs(int i, int j)
{
	int dx[4]={-1, 0, 1, 0};
	int dy[4]={0, -1, 0, 1};
	
	if(c[i][j] != -1)
		return c[i][j];
	
	c[i][j] = 1;
	
	
	for(int b=0; b<=3; b++)
	{
		int x = i + dx[b];
		int y = j + dy[b];
		
		if(x>=1 && x<=n && y>=1 && y<=m && a[x][y]<a[i][j])
			c[i][j] = max(c[i][j], dfs(x, y)+1);
	}
	return c[i][j];
}



int main()
{
	cin >> n >> m;
	
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++)
		{
			cin >> a[i][j];
		}
	}
	
	memset(c, -1, sizeof(c)); 
	
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++)
		{
			step = max(step, dfs(i, j));
		}
	}
	
	cout << step << endl;
	return 0;
}